package Algorithm.LICode;

public class AddTwoNum {

    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

    public static void main(String[] args) {
    }
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        // 定义一个新的ListNode，并定义头指针
        ListNode head = new ListNode(0);
        ListNode tail = head;
        while (l1 != null || l2 != null){
            int n1 = l1 != null ? l1.val : 0;
            int n2 = l2 != null ? l2.val : 0;
            int sum = n1 + n2 + carry;
        // 修改carry的值
            carry = sum / 10;
            // 将值对10取余后付给tail
            tail.next = new ListNode(sum % 10);
            tail = tail.next;

            // 没有合并的原因： 两个链表可能不一样长
            if (l1 != null){
                l1 = l1.next;

            }
            if (l2 != null){
                l2 = l2.next;
            }
            if (carry == 1){
                // 防止最后一位是1
                tail.next = new ListNode(carry);
            }
        }
        return head.next;
    }
}
